/// 用于[Option<T>]类型的数据返回值也是一个[Option<T>]
///
/// 使用限制
///   - T 类型必须有`is_empty`方法
///   - 如果指定了`trim`,则T类型必须有`trim`方法
///
/// 返回值说明：
///   - 如果输入的[None],则返回[None]
///   - 如果`T::is_empty`结果是`true`,则返回[None], 否则返回原数据
/// # Examples
/// ```
/// use axum_common::empty;
///
/// let option = Some("1");
/// let res = empty!(option);
/// assert_eq!(res, Some("1"));
///
/// let option: Option<String> = None;
/// let res = empty!(option);
/// assert_eq!(res, None);
/// ```
#[macro_export]
macro_rules! empty {
    (
        $option:expr
    )=> {
       {
           $option.filter(|o| !o.is_empty())
       }
    };
}

/// 用于[Option<T>]类型的数据返回值也是一个[Option<T>]
///
/// 使用限制
///   - T 类型必须有`trim`方法
///   - T::trim 返回值类型必须有`is_empty`方法
///
///
/// 返回值说明：
///   - 如果输入的[None],则返回[None]
///   - 如果`T::is_empty`结果是`true`,则返回[None], 否则返回原数据
/// # Examples
/// ```
/// use axum_common::trim_empty;
///
/// let option = Some("1");
/// let res = trim_empty!(option);
/// assert_eq!(res, Some("1"));
///
/// let option = Some("   ");
/// let res = trim_empty!(option);
/// assert_eq!(res, None);
///
/// let option: Option<String> = None;
/// let res = trim_empty!(option);
/// assert_eq!(res, None);
/// ```
#[macro_export]
macro_rules! trim_empty {
    (
        $option:expr
    )=> {
       {
           $option.filter(|o| !o.trim().is_empty())
       }
    };
}
